package top.zt9.service;

import java.util.Map;
import java.util.Set;

/**
 * @Author ztf
 * @Date 11:53 2021/11/19
 **/
public interface CacheService {
    /**
     * 保存key-value到redis的String结构中
     * @param key
     * @param value
     * @return
     */
    boolean save(String key, String value);
    /**
     * 保存key-value到redis的String结构中,传入的value是Object类型
     * @param key
     * @param value
     * @return
     */
    boolean saveObject(String key, Object value);

    /**
     * 根据key获取String类型value
     * @param key
     * @return
     */
    String get(String key);

    /**
     * 根据key获取Object类型value
     * @param key
     * @return
     */
    Object getObject(String key);

    /**
     * 根据key删除value
     * @param keys
     * @return
     */
    boolean del(String[] keys);

    boolean hMSet(String key, Map map);

    Map hMGet(String key);

    boolean set(String key, String value, Long expireSecond);

    Long incr(String key, long delta);

    Object hget(String key, String field);

    /**
     * set结构的add操作
     * @param key
     * @param set
     * @return
     */
    boolean sadd(String key, String[] set);

    /**
     * set结构中的members,获取set中的全部数据
     * @param key
     * @param set
     * @return
     */
    boolean saddObject(String key, Set<Map> set);

    /**
     *  set结构中的members,获取set中的全部数据
     * @param key
     * @return
     */
    Set<String> smembers(String key);

    /**
     * zset结构的根据分数查询数据
     * @param key
     * @param min
     * @param max
     * @return
     */
    Set<Object> zRangeByScore(String key, Long min, Long max);

    /**
     * 对hash结构的某一个field进行incr操作
     * @param key
     * @param field
     * @param delta
     * @return
     */
    Long hincr(String key, String field, Long delta);

    /**
     * 通配获取key集合
     * @param key
     * @return
     */
    Set<String> keys(String key);

    /**
     * zadd操作
     * @param key
     * @param value
     * @param score
     * @return
     */
    boolean zadd(String key, String value, Double score);
}
